/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.manager;

import br.com.deployment.entidade.registroimovel.Transferencia;
import br.com.deployment.entidade.registroimovel.Objeto;
import br.com.deployment.entidade.registroimovel.Imovel;
import br.com.deployment.entidade.empresa.Cartorio;
import br.com.deployment.entidade.humana.Pessoa;
import br.com.deployment.message.Msg;
import br.com.deployment.servico.CartorioServico;
import br.com.deployment.servico.ImovelServico;
import br.com.deployment.servico.TransferenciaServico;
import br.com.deployment.servico.UsuarioServico;
import br.com.deployment.utilitario.Sexo;
import br.com.deployment.utilitario.TipoPessoa;
import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperRunManager;

/**
 *
 * @author roniere
 */
@ManagedBean
@ViewScoped
public class ManagerCertidaoNegativa implements Serializable{

    @EJB
    ImovelServico imovelServico;
    @EJB
    TransferenciaServico transferenciaServico;
    @EJB
    CartorioServico cartorioServico;
    
    @EJB
    UsuarioServico usuarioDao;
    
    private String nome;
    private String documento;
    private Imovel imovel;
    private Objeto objeto;
    private List<Transferencia> lstNegativaImovel;
    private Transferencia transferencia;
    private Transferencia traSelect;
    private Pessoa pessoa;
    private boolean controlePessoa;

    public ManagerCertidaoNegativa() {
    }

    @PostConstruct
    public void init() {
        this.pessoa = new Pessoa();
        this.lstNegativaImovel = new ArrayList<Transferencia>();
        this.imovel = new Imovel();
        this.objeto = new Objeto();
        this.transferencia = new Transferencia();
        this.traSelect = new Transferencia();

        System.err.println("REINICIOU");
    }

    public void clear() {
        this.traSelect = new Transferencia();
    }

    public Objeto getObjeto() {
        return objeto;
    }

    public Transferencia getTraSelect() {
        return traSelect;
    }

    public void setTraSelect(Transferencia traSelect) {
        System.err.println("alterou" + traSelect);
        this.traSelect = traSelect;
    }

    public void setObjeto(Objeto objeto) {
        this.objeto = objeto;
    }

    public Imovel getImovel() {
        return imovel;
    }

    public void setImovel(Imovel imovel) {
        this.imovel = imovel;
    }

    public List<Transferencia> getLstPositivaImovel() {
        return lstNegativaImovel;
    }

    public void setLstPositivaImovel(List<Transferencia> lstPositivaImovel) {
        this.lstNegativaImovel = lstPositivaImovel;
    }

    public Pessoa getPessoa() {
        return pessoa;
    }

    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    public boolean isControlePessoa() {
        return controlePessoa;
    }

    public void setControlePessoa(boolean controlePessoa) {
        this.controlePessoa = controlePessoa;
    }

    public String getDocumento() {
        return documento;
    }

    public void setDocumento(String documento) {
        this.documento = documento;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
    

    public String certidaoNegativa() {
        
            if (pessoa != null) {
                System.err.println(pessoa.getNome());

                lstNegativaImovel = transferenciaServico.findTransImovel(null, pessoa, null, null);

                if (lstNegativaImovel.isEmpty()) {
//                    pessoa.setNome(null);
                    lstNegativaImovel = transferenciaServico.findTransImovel(null, pessoa, null, null);
                    if (lstNegativaImovel.isEmpty()) {
                        emitirNegativa();
                    }else{
                        Msg.messagemWarn("Existe registros vinculados ao CPF/CNPJ informado");
                    }
                } else {
                    Msg.messagemError("Existe registros vinculado");
                }
            }else{
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Informe o 'Nome' e a 'documento'."));

            }
        
        
        
        return "certidaoNegativa";
//        if(imovel != null){
//            System.err.println(imovel.getRegistro());
//            imovel.setObjeto(objeto);
//            lstNegativaImovel = transferenciaServico.findTransImovel(imovel, null, null);
//            System.err.println(lstNegativaImovel);
//          Msg.messagem("Filtro requerido");  
//        }
    }

    public String textoAdTra(List<Pessoa> p) {
        String texto = "";
       for (Pessoa pessoa1 : p) {
            
                texto += pessoa1.getNome() + ", "
                        + (pessoa1.getEndereco().getPais() == null ? "" : pessoa1.getEndereco().getPais().equalsIgnoreCase("Brasil") ? (pessoa1.getSexo() == Sexo.Masculino ? "Brasileiro" : "Brasileira") : "")
                        + "" + (pessoa1.getEstadocivil() == null ? "" : ", " + pessoa1.getEstadocivil().toString())
                        + "" + (pessoa1.getProfissao() == null ? "" : ", " + pessoa1.getEstadocivil().toString()) + ","
                        + " residente e domiciliado ";

                texto += pessoa1.getEndereco().getTipo_logradouro().toString().toLowerCase()
                        + "" + (pessoa1.getEndereco().getLogradouro() == null ? " " : " " + pessoa1.getEndereco().getLogradouro())
                        + "" + (pessoa1.getEndereco().getBairro() == null ? "" : ", Bairro " + pessoa1.getEndereco().getBairro())
                        + "" + (pessoa1.getEndereco().getCidade() == null ? "" : ", " + pessoa1.getEndereco().getCidade().getNom_cidade())
                        + "" + (pessoa1.getEndereco().getEstado() == null ? "" : ", " + pessoa1.getEndereco().getEstado().getNom_estado()) + "";


                texto += ""
                        + pessoa1.getCpf() == null ? "" : ", portador do CPF nº"
                        + pessoa1.getRg() == null ? "" : "e do RG nº " + pessoa1.getRg();

                texto += ""
                        + pessoa1.getCnpj() == null ? "" : ", portador do CNPJ nº" + pessoa1.getCnpj();
        }
        return texto;
    }

    public String geraTextoObjeto(Imovel imovel) {
        String texto = "";
        texto += " Um(a) " + imovel.getObjeto().getTipo().toString().toLowerCase() + " situado(a) no(a) "
                + imovel.getObjeto().getTipo_logradouro().toString().toLowerCase() + " " + imovel.getObjeto().getLogradouro() + ","
                + " número " + imovel.getObjeto().getNumero() + ", bairro " + imovel.getObjeto().getBairro() + " com as"
                + " seguintes características e  confrontações: " + imovel.getObjeto().getDescricao() + ". Frente " + imovel.getObjeto().getFrente() + "; lado direito, "
                + "" + imovel.getObjeto().getLadoDireito() + "; lado esquerdo," + imovel.getObjeto().getLadoEsquerdo() + "; fundo " + imovel.getObjeto().getFundo();

        return texto;
    }

    public String emitirNegativa() {

        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Nome" + nome, ""));
        try {
            Cartorio cartorio = new Cartorio();

            cartorio = cartorioServico.getCartorioContext();


            String nomeTitulo = "" + cartorio.getTitular().getNome();
            String endereco = "" + cartorio.getEndereco().getTipo_logradouro().toString().toLowerCase() + " " + cartorio.getEndereco().getLogradouro() + " - " + cartorio.getEndereco().getTelefone();
            String cidade = "" + cartorio.getEndereco().getCidade().getNom_cidade().toUpperCase() + " - " + cartorio.getEndereco().getEstado().getNom_estado().toUpperCase();


            FacesContext facesContext;
            HttpServletResponse response;
            InputStream inputStream;
            HashMap<String, Object> parametros;
            String texto;

            texto = "Certifico, como me faculta a lei e a requerimento de parte ";
            texto += "interessada que revendo em meu poder a Cartório, 1º Ofício ";
            texto += "desta Cidade e Comarca de Parnaíba, Estoque do Piauí, os livros ";
            texto += "Registro Geral de Imóveis, dos mesmos constatei, não existir nenhum ";
            texto += "imóvel matriculado / registrado em nome de ";
            
            texto += this.pessoa.getNome();
            
            if (pessoa.getTipo() == TipoPessoa.Fisica && (pessoa.getCpf() != "" && pessoa.getCpf() != null)) {
                texto += " portador do CPF nº ";
                texto += this.pessoa.getCpf();
            }
            if (pessoa.getTipo() == TipoPessoa.Juridica && (pessoa.getCnpj() != "" && pessoa.getCnpj() != null)) {
                texto += " portador do CNPJ nº ";
                texto += this.pessoa.getCnpj();
            }
            texto += ". Dou fé.";
            parametros = new HashMap<String, Object>();
            
            parametros.put("cartorioNome", cartorio.getNome());
            parametros.put("cartorioTitular", nomeTitulo + " - Titular");
            parametros.put("cartorioEndereco", endereco);
            parametros.put("cartorioCidade", cidade);
            parametros.put("texto", texto);
            facesContext = FacesContext.getCurrentInstance();
            response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
            inputStream = facesContext.getExternalContext().getResourceAsStream("/relatorio/certidaoNegativa.jasper");
            ServletOutputStream ouputStream = response.getOutputStream();
            JasperRunManager.runReportToPdfStream(inputStream, ouputStream, parametros, new JREmptyDataSource());
            response.setContentType("application/pdf");
            facesContext.responseComplete();
            ouputStream.flush();
            ouputStream.close();
        } catch (JRException ex) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(ex.getMessage()));
        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(ex.getMessage()));
        }

        return "certidaoNegativa";
    }
}
